#![allow(dead_code)]
pub struct Solution;

impl Solution {
    pub fn is_palindrome(x: i32) -> bool {
        let str = &(x.to_string());
        let len = x.to_string().len();
        if x == 0 {
            return true;
        } else if !x.is_positive() {
            return false;
        }

        // for i in 0..=(len + 1) / 2 {
        for i in 0..(len + 1) / 2 {
            // BUG: overflowing_sub(), saturating_sub(), checked_sub()等的用法
            // 减法溢出
            // if str.chars().nth(i) == str.chars().nth(len.overflowing_sub(1 + i).0) {
            if str.chars().nth(i) == str.chars().nth(len.saturating_sub(1 + i)) {
                println!("ok");
            } else {
                return false;
            }
        }
        true
    }
}

#[cfg(test)]
mod tests {
    use super::Solution;
    #[test]
    fn test_1() {
        assert!(Solution::is_palindrome(121));
        assert!(!Solution::is_palindrome(123));
        assert!(Solution::is_palindrome(8));
    }
}
